﻿using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

	public float speed;								/* Geschwindigkeit mit der der Charakter bewegt wird */
	public Transform player;						/* Objekt auf das sich das Skript auswirkt. */
	private Vector3 lookRotationPoint;				/* Blickrichtung des Spielers */
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () 
	{

		/* Auslesen wo der Mauscursor die Welt trifft und diese Position in Weltkoordinaten umrechnen. */
		RaycastHit hit;							
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);

		/* Rotation der Spielfigur in Richtung des Mauscursors */
		if (Physics.Raycast (ray, out hit)) 
		{

			if (hit.collider.gameObject.tag == "Boden" )
			{
			lookRotationPoint = hit.point - player.transform.position;
			player.transform.rotation = Quaternion.LookRotation( lookRotationPoint.normalized );
			player.transform.rotation = Quaternion.Euler ( 0, player.transform.rotation.eulerAngles.y, 0 );
			}

		}

		/* Bewegung der Spielfigur in Blickrichtung */
		if ( Input.GetKey(KeyCode.W) )
		{
			lookRotationPoint = lookRotationPoint.normalized;
			lookRotationPoint.y = 0;
			transform.position += lookRotationPoint * speed;
		}
		if ( Input.GetKey(KeyCode.S) ) 
		{
			lookRotationPoint = lookRotationPoint.normalized;
			lookRotationPoint.y = 0;
			transform.position -= lookRotationPoint * speed;		
		}

		/* Strafe-Bewegung der Spielfigur mit Hilfe des Kreuzproduktes */
		if ( Input.GetKey(KeyCode.A) ) 
		{
			transform.position -= Vector3.Cross( player.transform.up , lookRotationPoint.normalized ) * speed;	
		}
		if ( Input.GetKey(KeyCode.D) ) 
		{
			transform.position += Vector3.Cross( player.transform.up , lookRotationPoint.normalized ) * speed;		
		}

	}
}
